#!/usr/bin/python
# Copyright 2010 Google Inc.
# Licensed under the Apache License, Version 2.0
# http://www.apache.org/licenses/LICENSE-2.0

# Google's Python Class
# http://code.google.com/edu/languages/google-python-class/

import sys
import re
import os
import shutil
import zipfile

"""Copy Special exercise
"""

# +++your code here+++
# Write functions and modify main() to call them


def get_special_paths(dir):
  specialList = []
  pathsList = os.listdir(dir)
  for special in pathsList:
    if re.search(r'__(\w+)__', special):
      specialList.append(os.path.abspath(os.path.join(dir, special)))  # 将目录和文件名合成为一个路径，并添加到返回的列表中
  return specialList


def copy_to(paths, targetDir):
  if not os.path.exists(targetDir):
    os.mkdir(targetDir)
  for path in paths:
    fame = os.path.basename(path)
    shutil.copy(path, os.path.join(targetDir, fame))


def zip_to(zipFile, compressingPath):
  f = zipfile.ZipFile(zipFile, 'w')
  for src in compressingPath:
    f.write(src)
  f.close()


def main():
  # This basic command line argument parsing code is provided.
  # Add code to call your functions below.

  # Make a list of command line arguments, omitting the [0] element
  # which is the script itself.
  args = sys.argv[1:]
  if not args:
    print("usage: [--todir dir][--tozip zipfile] dir [dir ...]")
    sys.exit(1)

  # todir and tozip are either set from command line
  # or left as the empty string.
  # The args array is left just containing the dirs.
  todir = ''
  if args[0] == '--todir':
    todir = args[1]
    del args[0:2]

  tozip = ''
  if args[0] == '--tozip':
    tozip = args[1]
    del args[0:2]

  if len(args) == 0:
    print("error: must specify one or more dirs")
    sys.exit(1)

  # +++your code here+++
  # Call your functions
  # LAB(begin solution)

  # Gather all the special files
  specials = get_specials(args[0])
  if todir:
    to_dir(todir, specials)
  if tozip:
    to_zip(tozip, specials)
      
if __name__ == "__main__":
  main()
